\documentclass[a4paper,fontset = windows]{ctexart}
\usepackage{metalogo}
\usepackage[left=2.00cm, right=2.00cm, top=2.00cm, bottom=2.00cm]{geometry}
\usepackage[
  pdfborder=0 0 0,
  bookmarksnumbered=true
]{hyperref}
\usepackage{calligra}
\usepackage{graphicx}
\usepackage{attachfile2} %adding 2020/12/02 添加附件
\usepackage{doc} %adding 2020/12/02 提供changes命令
\usepackage{xcolor}
\usepackage{float}
\parindent=0pt

\begin{document}
\changes{v1.0.0}{2020/11/19}{根据Debian指南和Manjaro手册创建文档}
\changes{v1.0.1}{2020/12/02}{修改各配置文件为附件}
\changes{v1.0.2}{2021/03/07}{增加majaro关于zsh的设置}
\changes{v1.0.3}{2021/12/07}{增加wayland设置texlive}
\newcommand\system{Manjaro}
\title{\system{}指南}
\date{2021/12/07\qquad{}v1.0.3 \thanks{fengzhenhua@outlook.com}}
\author{冯振华}
\maketitle
\begin{abstract}
This edition of Manjaro includes the GNOME desktop,
which is part of the GNU project. It offers an unconventional but
intuitive desktop aiming to help productivity. It comes with a very
complete and aesthetically coherent set of applications to fill the
most common needs. GNOME edition disc image files start with
manjaro-gnome.
\footnote{2020年11月18日在Dell-latitude3510上实际测试了\system{}系统，其软件基本最新，对硬件的支持相当完美，因此决定在ThinkPadT490上安装。由于时间紧张，故在\system{}使用手册中直接截取了部分英文，同时结合之前的Debian(buster)完成这份配置手册。}

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.3]{./gnome-edition.png}
   \caption{Gnome-Edition}
   \label{fig:cover}
\end{figure}

\end{abstract}

\clearpage
\tableofcontents
\clearpage

\section{Download and install}
登录\system{} 官网\url{https://manjaro.org/get-manjaro/}
图\ref{fig:manjaro-version}是下载页面截屏，此有两个版本，一个为预装软件的版本，拿来即用，十分方便; 一个是Minimal 版本，后者没有预装过多的软件。作为日常办公用，我选择了后者，用到一个功能则安装一个。

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.4]{./manjaro-minimal.png}
   \caption{manjaro-gnome 的两个版本}
   \label{fig:manjaro-version}
\end{figure}

\subsection{Writing to a USB flash drive in Linux}

\subsubsection{Using the GUI}
To take advantage of the faster access times and much quieter nature
of a USB flash drive, there are a number of methods of writing the
disc image file. One of the easiest is to use SUSE Studio Image-
writer\ref{fig:writer}.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.5]{./writer.png}
   \caption{SUSE Studio Imagewriter https://en.opensuse.org/ SDB:Live\_USB\_stick}
   \label{fig:writer}
\end{figure}

SUSE Studio Imagewriter should be available for installation from
your distribution’s Software Center / Software Manager / Pack-
age Manager / repositories. Once SUSE Studio Imagewriter has
been downloaded and installed, ensure that your USB flash drive
is plugged in before starting the application.

The process of using SUSE Studio Imagewriter is very straightfor-
ward:

\begin{enumerate}
   \item Click on the centre icon.
   \item Navigate to where you downloaded the disc image file, and select
it.
\item Ensure that your USB flash drive has been selected from the drop-
down menu.
\item Click on the Write button.
\item Once it has finished, reboot your system, making sure to select the
USB flash drive as the boot device in the BIOS menu (or its UEFI
equivalent).
\end{enumerate}

\subsubsection{Using the CLI}

If you don’t want to install extra software, and you are comfortable
using the command line, there’s an even easier way of writing a disc
image to a USB device.

\begin{enumerate}
   \item Connect the USB flash drive to your PC, open a terminal and cd to
where you downloaded the disc image.
\item Check the device identifier with:
sudo fdisk -l.
\item Write the image with:
sudo dd if=manjaro-gnome-18.0-stable-x86\_64.iso of=/dev/(Device
identifier from above) 

My USB drive is at /dev/sdc so I would use:

sudo dd if=manjaro-gnome-18.0-stable-x86\_64.iso of=/dev/sdc

To view how the writing process progresses, use the option status=progress:
sudo dd if=manjaro-gnome-18.0-stable-x86\_64.iso of=/dev/sdc
status=progress

\item Once completed reboot your system and boot from the USB drive
by selecting it as the boot device in the BIOS menu (or its UEFI
equivalent).
\end{enumerate}

\subsubsection{Writing to a USB flash drive in Microsoft Windows}

For Windows users using USB media, Rufus\ref{fig:rufus}  is highly recommen-
ded.

Select the USB key to be used in the Device menu. Then, on the
line beginning with Boot selection, click on Select to select your down-
loaded disc image, and then Start. After doing so, select DD Image
in the window that appears.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.5]{./rufus.png}
   \caption{Rufus with recommended settings}
   \label{fig:rufus}
\end{figure}

Another recommended piece of software is Etcher\ref{fig:Etcher} . It is incredibly
simple to use. All you have to do is select the disc image, the USB
drive, and start flashing the image!

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.3]{./Etcher.png}
   \caption{Rufus with recommended settings}
   \label{fig:Etcher}
\end{figure}

\subsection{安装Manjaro}

\subsubsection{Booting in UEFI mode}

{\bf The most important step is to ensure that your machine does not
have Secure Boot enabled.} Only a very limited number of operating
systems will boot with this enabled. You must disable Secure Boot
in your UEFI/BIOS before proceeding; if you don’t know how to do
this please refer to your computer’s user manual, as it differs for all
computers.

\subsubsection{The boot menu}

When you boot from your installation media (CD/DVD or USB flash
drive) you should be presented with the Manjaro boot screen.\ref{fig:uefi} This
screen provides several options to help get the best experience from
the Live environment.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.5]{./uefi.png}
   \caption{Boot menu in UEFI mode}
   \label{fig:uefi}
\end{figure}

It is possible at this stage to set your preferred language and key-
board layout before using Manjaro. This means that you will be able
to use and install Manjaro in your native language straight away.

\subsubsection{Manual installation on a UEFI system}

{\bf Note :The windows decorations displayed in the following chapter may
differ from the ones currently used. It does not affect the methods shown.}

The manual installation option is the one that changes the most
if you are using a UEFI system compared to one with BIOS. The fol-
lowing steps will walk you through the process of creating a partition
scheme suitable for your system in three different scenarios. The first
one (Creating partitions from scratch) will show you how to create
your partition scheme from within Calamares without using existing
partitions. The second one (Using GParted to create partitions be-
forehand) will show you how to create the partitions with GParted
and then put them to use in the installer. Finally, the third one (Using
an already existing EFI partition ) will show you how to use a EFI
partition previously created and used by another operating system.

\subsubsection{Creating partitions from scratch}

This scenario will assume that you do not wish to use a single exist-
ing partition. We will thus start with a completely empty hard drive.
This will also be the case if you are using a brand new drive or are
using a virtual machine.

\subsubsection{Create a partition table}

\begin{enumerate}
   \item Once you select the Manual
partitioning option and click
on Next, the first thing to make
sure is that the partition table
is of type GPT. To create a new
partition table, click on the
New Partition Table button
and select GUID Partition
Table (GPT). For a refresher
on partitions and partition
tables, see chapter Some useful
definitions.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.3]{./1.png}
   \caption{Create a partition table}
\end{figure}

\item Then, select the empty space
and click on Create to make a
new partition. The first one we
will create will be the EFI par-
tition, which will house some
files used when booting.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.3]{./2.png}
   \caption{Create the EFI partition}
\end{figure}

\item In the window that appears,
select a size of a few hundred
MB. Here I chose 500 MB. Then,
select fat32 as the file system.
For a refresher on file systems,
see chapter Some useful defini-
tions.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.4]{./3.png}
\end{figure}

\item Next, choose /boot/efi as the
mount point. The contents of
the partition will be accessible
from this directory once Man-
jaro is installed. Be careful not
to accidentally choose /boot!

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.4]{./4.png}
\end{figure}

\item Finally, select the boot and
esp flags from the list. Once
this is done, click the OK but-
ton.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.4]{./5.png}
\end{figure}

\item The next partition we will
create is the swap. This par-
tition will be used if you ever
run out of RAM to complete
operations. The suggested size
for this partition is a few GB.
Here I chose 4 GB. Choose
linuxswap as the file system.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.4]{./6.png}
   \caption{Create the swap partition}
\end{figure}

\item You can also click and drag
the partition to move it else-
where in the unallocated space.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.4]{./7.png}
   \caption{Create the swap partition}
\end{figure}

\item Next are the partitions used
by Manjaro itself. There are a
variety of possible scenarios.
Here I chose the simplest case
where I only created a single
partition mounted under the
/ directory. Another scenario
with the /home directory being
housed on another partition is
presented in chapter Manual
installation on a BIOS system.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.3]{./8.png}
   \caption{Create other partitions}
\end{figure}

\item You can then proceed as
usual up to the summary,
which is the last step before
the changes are applied to your
drive.

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.3]{./9.png}
   \caption{Look back and confirm}
\end{figure}

\end{enumerate}

完成上述分区设置后，点击 Next ，系统进入安装过程，其间需要设置一些时区等的设置。这里要注意：在安装过程中我遇到了卡在93\% 进度条不动的情况，这是因为联网下载相关软件的问题，同时连接国外网络很慢，于是{\bf 断网安装}可以完美解决问题。


\section{软件管理工具Pacman}
\subsection{Using Pacman}

Pacman is the Arch Linux package manager. This underpins Pamac
and Octopi but doesn’t have a graphical interface. Instead, it is used
by typing commands on the terminal. The commands allow you to
install, upgrade, configure, and remove software.

\subsubsection{切换国内源}

只需一条命令：

\begin{verbatim}
sudo pacman-mirrors -c China
sudo pacman-mirrors -i -c China -m rank
\end{verbatim}

第一条命令非常方便，但是第二条命令可以让源按下载速度排序，然后自己确认使用哪一个。我个人觉得使用第一条命令换成国内的镜像即可。原有的被保存在 

\begin{verbatim}
/var/lib/pacman-mirrors/custom-mirrors.json
\end{verbatim}

现在的被保存在

\begin{verbatim}
/etc/pacman.d/mirrorlist
\end{verbatim}

另外pacman 的下载缓存在

\begin{verbatim}
/var/cache/pacman
\end{verbatim}

对于始终无法信任的情况，选择Optional TrustAll 即可，所有res都用这个策略。


\subsubsection{Synchronising with the Manjaro repositories}

As new packages are added to the repositories you will need to reg-
ularly synchronise the package lists. This is normally taken care of
automatically on a regular basis by the software managers, but to
perform this manually type the following into the terminal:

\begin{verbatim}
sudo pacman -Sy
\end{verbatim}

This will only download the package lists if there has been a change.
Occasionally you may want to force the package lists to be down-
loaded. To do this, type:

\begin{verbatim}
sudo pacman -Syy
\end{verbatim}

\subsubsection{Updating software}

Pacman will allow you to perform an update of software already
installed with the command:

\begin{verbatim}
sudo pacman -Su
\end{verbatim}

It’s a good idea to check whether the package lists are up-to-date at
the same time. To do so, type:

\begin{verbatim}
sudo pacman -Syu
\end{verbatim}

You can also force a package list synchronisation before performing
an update with:

\begin{verbatim}
sudo pacman -Syyu
\end{verbatim}

\subsubsection{Searching for software}

Finding a package by name is really straightforward. For example, to
search for a text editor called Leafpad, type:

\begin{verbatim}
sudo pacman -Ss leafpad
\end{verbatim}

\subsubsection{Installing software}

Installing a package is equally straightforward. For example, to in-
stall Leafpad, type:

\begin{verbatim}
sudo pacman -S leafpad
\end{verbatim}

\subsubsection{Removing software}

To remove a software package you need to know its name, but the
command is straightforward. To remove Leafpad, type:

\begin{verbatim}
sudo pacman -R leafpad
\end{verbatim}

It’s also possible to remove a package and any dependencies it re-
quired when it was installed. Assuming those other packages are not
being used by another piece of software, they will become orphan
packages. These serve no function other than taking up space! To
remove a software package with its dependencies, type:

\begin{verbatim}
sudo pacman -Rs leafpad
\end{verbatim}

A package may also create configuration files. Normally these are
left in place so your configuration is not lost, and can be reused if
you install the package again. However, if you want to remove these
configuration files too, the command is:

\begin{verbatim}
sudo pacman -Rns leafpad
\end{verbatim}

If at a later date you want to remove all orphan packages and con-
figuration files for packages that you removed some time ago, the
following command will do it:

\begin{verbatim}
sudo pacman -Rns $(pacman -Qtdq)
\end{verbatim}

清除己下载的安装包

\begin{verbatim}
# pacman -Scc
\end{verbatim}

查看日志文件

\begin{verbatim}
# du -t 100M /var
or
# journalctl --disk-usage
\end{verbatim}

删除指定大小的日志文件

\begin{verbatim}
# journalctl --vacuum-size=50M
\end{verbatim}

Be warned, though: this is an advanced command!

\subsubsection{Other Pacman commands}

It’s a good idea to become familiar with the Pacman commands. It
can be a very useful tool in case the other software managers refuse
to complete an installation, for example if an installation process is
interrupted. The Pacman manpage is very informational and can be
viewed with the command:

\begin{verbatim}
man pacman
\end{verbatim}

To exit, press q.

\subsection{Updating the mirror list}

Manjaro Linux packages are hosted on a number of servers across the
world; these servers mirror the official Manjaro software repository.
When you first install Manjaro it will try to work out which server
is closest to you so that software downloads complete as quickly as
possible.

Sometimes, though, the list of mirrors can get old. New mirrors
can become available, and some mirrors are removed. Updates to
Manjaro will regularly trigger an update of the mirror list, but some-
times it’s useful to do this manually.

To update the mirror list use the following command:

\begin{verbatim}
sudo pacman-mirrors -f o
\end{verbatim}

This will test the speed of all currently available mirrors and set your
machine to use the best for you. Once this command has completed,
you should force a download of the package lists with the command:

\begin{verbatim}
sudo pacman -Syyu
\end{verbatim}


If you would like more control over which mirrors to use, run the
command:

\begin{verbatim}
sudo pacman-mirrors -i
\end{verbatim}

This will allow you to select which mirror, or mirrors, to try when
checking for software updates and downloading new packages. It’s
normally best to choose mirrors that are geographically close to you,
so if you’re in Canada then servers from Canada and the US are
generally a good bet. Of course, you’re free to choose whichever you
want!

To reset back to an automatic choice, run this command:

\begin{verbatim}
sudo pacman-mirrors -f
\end{verbatim}

Remember to force a download of the package lists to use the new
mirrors!

\section{基础配置}
\subsection{设置root权限}
在2021年 01月 03日升级manjaro 后发现fcitx5不与很好的工作，同时系统也不能快速的进入和退出，我意识到可能升级系统导致了问题。于是决定下载最新的安装镜像，然后记录U盘后重新安装了一遍，但是新安装成的系统的安装过程中做了简化，它没有设置root密码一项，所以在安装成功后，需要首先取得root权限才能进行系统的维护。这里记录命令如下
\begin{verbatim}
$ sudo passwd root
\end{verbatim}
然后输入两次密码就可以了。
\subsection{配置备份}

如果是新电脑或从windows 环境下全面转入 linux 工作的用户不必进行这一步设置。之前安装过linux的用户，由于其/home/yourname/ 中存在一些你常用软件的配置文件，所以在安装新系统时，需要重置原来的设置。删除主目录的配置文件,由于vim的重要性，此处注意先备份一下vim配置文件 {.vimrc}

\begin{verbatim}
# rm -rf /home/thinkpad/.[a-z]*
\end{verbatim}

\subsection{gnome3恢复初始设置}

使用 gnome3 时间久了有可能会因为设置导致这样那样的问题，所以在这里我百度到了重置gnome3 的方法。

\begin{verbatim}
$ dconf dump / > my_settings  备份配置
$ dconf reset -f /            重置桌面
$ dconf load / < my_settings  还原配置
\end{verbatim}

\subsection{必备工具}


\system{} 已经足够好用，但是在测试完成之后，用在工作当中有些软件还是和预装的有所差别的，这里我选择了最小化的安装镜像,所以这里需要安装一些我日常工作必务的工具。

\begin{verbatim}
# pacman -S vim unarchiver pdftk cups-pdf  poppler-data
\end{verbatim}

\begin{enumerate}
   \item vim :linux 下的编辑器之王。
   \item unarchiver : manjaro 中的解压缩软件，提供命令unar。
   \item pdftk: pdf文件的强大处理工具。
   \item cups-pdf : pdf 虚拟打印机。
   \item poppler-data : evince ,okular ,epdfview 的pdf 功能均由xpdf 的分支 poppler提供，如果不安装则有部分的pdf 文件在用evince 打开时不显示汉字。
\end{enumerate}

\subsection{配置输入法fcitx}

目前fcix 一共有两个版本可用，一个是老版的fcitx4 ,一个是新版的fcitx5,分别记录其安装方法和配置如下。
\subsubsection{fcitx4  的配置}

此为fcitx4 的基础配置，安装即可,没有多余的配置。

\begin{verbatim}
# pacman -S fcitx fcitx-table fcitx-table-wbpy 
\end{verbatim}

\begin{enumerate}
   \item fcitx :输入法基础框架主程序
   \item fcitx-table: 输入法面板
   \item fcitx-table-wbpy :五笔输入法
\end{enumerate}


\subsubsection{fcitx5配置}

\begin{verbatim}
# pacman -S fcitx5 fcitx5-qt fcitx5-gtk fcitx5-configtool fcitx5-chinese-addons
  fcitx5-material-color
\end{verbatim}

\begin{enumerate}
   \item fcitx5:输入法基础框架主程序
   \item fcitx5-qt :QT5程序的支持
   \item fcitx5-gtk:GTK 程序的支持
   \item fcitx-chinese-addons :简体中文输入的支持，云拼音
   \item fcitx5-material-color:一款使用Material Design 色的fcitx5皮肤，旨在模仿windows10 自带输入法的UI
\end{enumerate}

对于xorg显示服务器，编辑文件/etc/profile 添加或修改为

\begin{verbatim}
export GTK_IM_MODULE=fcitx5
export QT_IM_MODULE=fcitx5
export XMODIFIERS="@im=fcitx5"
fcitx5 &
\end{verbatim}

对于wayland显示服务器，编辑文件 ~/.pam\_environment 添加

\begin{verbatim}
GTK_IM_MODULE DEFAULT=fcitx5
QT_IM_MODULE DEFAULT=fcitx5
XMODIFIERS DEFAULT=@im=fcitx5
\end{verbatim}

由于xorg和wayland读取环境变量时所需要的文件和格式不同，所以在设置fcitx5时要特别注意以上设置。


\subsection{配置gnome3}
\subsubsection{自定义Terminal快捷键}

设置->键盘->自定义快捷键->添加

名称:Terminal

命令:gnome-terminal

设置:Ctrl+Alt+T

\subsubsection{安装gnome拓展}
为了方便gnome3的使用，安装以下拓展

\begin{verbatim}
Desktop Icons ,Dash to Dock,Hide Top Bar, Suspend Button
\end{verbatim}
\begin{enumerate}
   \item Desktop Icons : 桌面显示图标拓展
   \item Dash to Dock : Dock 拓展
   \item Hide Top Bar :系统工具栏自动隐藏拓展
   \item Suspend Button :挂起按扭
\end{enumerate}

在\system{} 中上述插件只有 Hide Top Bar 没有安装，这个需要自己安装。

\subsection{配置zsh}

当更新系统后我发现新安装的系统和滚动升级后的系统，zsh 主题并未跟着更新，2021年3月7日得到解决方法。就是重新安装一下配置文件，即执行

\begin{verbatim}
# pacman -S manjaro-zsh-config
# cp /etc/skel/.zshrc ~/.zshrc
\end{verbatim}

重新进入shell后，得到新的zsh 主题。
\subsection{安装额外字体}

安装windows10下拷贝来的fonts字体,及founder ,adobe等到系统的指定目录。

\begin{verbatim}
# cp ./Fonts/Adobe/*  /usr/share/fonts/Adobe/
# cp ./Fonts/windows10/  /usr/share/fonts/windows10/
# cp ./Fonts/founder_GBK/  /usr/share/fonts/Founder/
# fc-cache -vf
\end{verbatim}

\section{固件升级}
使用{\bf fwupd}更新电脑固件。先安装此命令

\begin{verbatim}
# pacman -S fwupd
\end{verbatim}

查询更新

\begin{verbatim}
# fwupdmgr get-updates
\end{verbatim}

如果有更新可用，则直接下载安装

\begin{verbatim}
# fwupdmgr update
\end{verbatim}

注意：升级固件是一项非常谨慎的事情，升级过程中一定确保电脑连接电源，期间不能断电，以免造成损坏。

\section{办公工具}

\subsection{邮件客户端}

manjaro 非minimal版中默认安装的邮件客户端为geary,但是我的新浪邮箱不再支持这个客户端。于是重新安装了thunderbird.

\begin{verbatim}
# pacman -S thunderbird thunderbird-i18n-zh-cn
\end{verbatim}

\begin{enumerate}
   \item thunderbird :邮件客户端主程序
   \item thunderbird-i18-zh-cn: 中文界面程序包
\end{enumerate}

\subsection{多媒体}

系统默认安装的是totem 播放器，这里以更加简洁的 mpv 取代， 同时按装 mplayer 支持goldendict 发音。

\begin{verbatim}
# pacman -Rns totem 
# pacman -S mpv mplayer
\end{verbatim}

\subsection{电子词典}

系统没有内置，此安装功能强大的goldendict 

\begin{verbatim}
# pacman -S goldendict
\end{verbatim}

同时设置如下
\begin{enumerate}
   \item  关闭全文搜索，以加快查询速度
      \begin{figure}[H]
	 \centering
	 \includegraphics[scale=0.25]{./golden1.png}
	 \caption{关闭全文搜索}
      \end{figure}
   \item 使用外部mplayer 发音
      \begin{figure}[H]
	 \centering
	 \includegraphics[scale=0.25]{./golden2.png}
	 \caption{外部发音}
      \end{figure}
   \item 设置展开可选部分
      \begin{figure}[H]
	 \centering
	 \includegraphics[scale=0.25]{./golden3.png}
	 \caption{展开可选部分}
      \end{figure}
\end{enumerate}

\subsection{电子书工具}

系统默认安装了evince PDF阅读器，然而我还需要一个epub等阅读器，此处安装clibre

\begin{verbatim}
# pacman -S clibre
\end{verbatim}


\subsection{LaTeX}
\subsubsection{安装Texlive2021}

\begin{enumerate}
   \item{下载}
      下载地址：\\
      官方镜像: \href{https://mirrors.ustc.edu.cn/CTAN/systems/texlive/Images/}{texlive2021.iso}\\
      USTC 镜像: \href{https://mirrors.ustc.edu.cn/CTAN/systems/texlive/Images/}{texlive2021.iso}

      上述下载地址为中国科学技术大学的地址，此外还有若干，请君从如下地址自行选择

      \href{https://ctan.org/mirrors}{https://ctan.org/mirrors}
   \item{挂载 ISO 镜像}
      \begin{verbatim}
      # mount -o loop texlive2021.iso  /mnt/
      # cd /mnt
      # ./install-tl	
      \end{verbatim}
      出现选项后，输入 I 直接安装（也可以更改选项）。不出意外的话，5 分钟应该就 OK 了， 然后退出 root 用户。
   \item{环境变量}

      2021年升级manjaro后，发现显示服务器默认为wayland,它的响应速度很好。但是对于文件 ~/.bashrc 是不会读取的，这在fcitx5的调用过程中反应出来，但是使用texlive编译文档，有两种方式，如果足够熟练则不需要说明文档，那完全可以用pacman 安装即可，但是一般宏包也是会升级的，如果不看说明文档则有些包在调用时就会出问题。所以还是通过官方ISO镜像来安装texlive比较好。这样不仅可以使用tlmgr 和texdoc ，而且也可以阅读到最新的说明文档，综合考虑比pacman的方式好一些，应该为上策。

      根据texlive-en.pdf文件（texdoc texlive 可以调出）介绍，如果在安装过程中选择了建立超链接，则不必考虑环境变量，所以在安装时要建立超链接，这样子可方便一些。texlive-en.pdf 中原文如下：

      If you elected to create symlinks in standard directories (described in section 3.2.4), then there is no need to edit environment variables. Otherwise, on Unix systems, the directory of the binaries for your platform must be added to the search path. (On Windows, the installer takes care of this.)

      如果没有建立超链接，则在当前用户的 ~/.bashrc 中加入如下语句：
      \begin{verbatim}
      # TeX Live 2021
      export MANPATH=${MANPATH}:/urs/local/texlive/2021/texmf-dist/doc/man
      export INFOPATH=${INFOPATH}:/usr/local/texlive/2021/texmf-dist/doc/info
      export PATH=${PATH}:/usr/local/texlive/2021/bin/x86_64-linux	
      \end{verbatim}
   \item{卸载 ISO 镜像}
      \begin{verbatim}
      #	umount /mnt/
      \end{verbatim}
   \item{更新 TeXLive}
      可以使用如下命令更新 TeXLive 宏包：
      \begin{verbatim}
      # 更新 TeXLive 包管理器 tlmgr
      # tlmgr update --self
      # 更新 TeXLive 的全部包
      # tlmgr update --all
      \end{verbatim}
      默认情况下，会自动搜索合适的镜像来更新，也可以使用 --repository 选项指定了要使用 哪一个 CTAN 镜像。\\
      比如 USTC 镜像:

      \begin{verbatim}
      #tlmgr update --self --repository 
      http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet/
      #tlmgr update --all --repository 
      http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet/
      \end{verbatim}

      比如阿里云镜像:

      \begin{verbatim}
      #tlmgr update --self --repository 
                    http://mirrors.aliyun.com/CTAN/systems/texlive/tlnet/
      #tlmgr update --all --repository 
                    http://mirrors.aliyun.com/CTAN/systems/texlive/tlnet/
      \end{verbatim}

  为了方便我们也可以直接设置texlive 源为国内源，命令如下

  \begin{verbatim}
#清华大学为例
tlmgr option repository https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
#华中科技大学安装源
tlmgr repository set http://mirror.hust.edu.cn/CTAN/systems/texlive/tlnet
  \end{verbatim}

   \item{安装额外的字体}
      TeXLive 2021 在使用 xeLaTeX 处理中文时，有自己的默认字体。大多数 Linux 发行版下， 都使用自带的 Fandol 字体。如果想要使用 Windows 字体，可以将字体文件复制到 ~/.fonts 目录下，并在 tex 源码中 指定字体选项即可。

      \XeTeX{}和\LuaTeX{}可以直接使用系统字体.然而texlive自带的字体不在系统的字体目录中,所以当使用\XeLaTeX{}编译文件时,如果使用了texlive里面带的字体,就会出错,这时需要进行如下配置,让系统可以识别texlive所带的字体就可以了.
      \begin{verbatim}
      # cp /usr/local/texlive/2021/texmf-var/fonts/conf/texlive-fontconfig.conf 
      /etc/fonts/conf.d/09-texlive.conf
      # fc-cache -fsv
      \end{verbatim}
\end{enumerate}

\subsubsection{vim插件vundle配置}

这里借助vundle 管理vim 插件，用它安装 vim-latex 插件，来写PDF文档。
\begin{enumerate}
   \item 首先安装 git
      \begin{verbatim}
      # pacman -S git
      \end{verbatim}
   \item 下载Vundle。复制Vundle 的Github 仓库地址：
      \begin{verbatim}
      $ git clone https://github.com/VundleVim/Vundle.vim.git 
                  ~/.vim/bundle/Vundle.vim
      \end{verbatim}
      为方便起见，给出我自己设置好的bundle 附件，点击另存为到指定路径即可。


      附件：\textattachfile[color=red]{./attachfiles/bundle.zip}{bundle.zip}

   \item 配置 Vundle
      创建 ~/.vimrc 文件,以通知 Vim 使用新的插件管理器.安装,配置和移除插件需要的这个文件.这里配置文件在 ~/.vim/bundle/Vundle.vim/README.md 另外也有简体中文本的说明.我使用的英文版的.复制到 ~/.vimrc 并删除多余的内容,我修改后的.vimrc 文件为:

      附件：\textattachfile[color=red]{./attachfiles/.vimrc}{.vimrc}

      在使用vim-latex 编辑文件时需编译和查看两个步骤.这里需要修改vim-latex 的配置文件.其位置为
      \begin{verbatim}
      ~/.vim/bundle/vim-latex/ftplugin/latex-suite/texrc
      \end{verbatim}
      修改此文件以实现编译 $\backslash\backslash$ 和 $\backslash lv$ 使用 evince 查看生成的pdf 文件.具体修改内容为
      \begin{verbatim}
      if has('macunix')
      TexLet g:Tex_DefaultTargetFormat = 'pdf'
      else
      TexLet g:Tex_DefaultTargetFormat = 'pdf'
      endif
      TexLet g:Tex_CompileRule_pdf = 'xelatex -synctex=1 
      -interaction=nonstopmode -file-line-error-style $*'
      TexLet g:Tex_ViewRule_pdf='evince'
      \end{verbatim}
      注意：在附件 bundle.zip 中已经修改完毕。
\end{enumerate}



\subsubsection{fcitx.vim配置}

在使用vim-latex写作时，由于经常输入中文，所以在vim 切换到控制模式后需要将输入法切换到英文再操作，这时可以使用 fcitx.vim 实现自动切换。代码来源为
\footnote{在\system{}中我没有使用这个配置，但是依然记录下，以备不时之需。}

\begin{verbatim}
https://github.com/lilydjwg/fcitx.vim/blob/master/so/fcitx.vim
\end{verbatim}

附件：\textattachfile[color=red]{./attachfiles/fcitx.vim}{fcitx.vim}

\subsection{TeXmacs}
在linux中使用TeXmacs时，输入中文只是显示字符编码，不显示文字。原因在于TeXmacs中没有默认设置好中文字体，所以解决方案为在TeXmacs默认字体文件夹中建立一个软链接指向系统字体。然后执行
TeXmacs的字体刷新即可。如下
\begin{verbatim}
~:ln /usr/share/fonts/windows10 /home/feng/.TeXmacs/fonts/truetype/windows10
~:texmacs --delete-font-cache
\end{verbatim}
再重新启动TeXmacs 即可输入中文。
\subsection{PDFTK}

\subsubsection{PDF文件加outline}
从2019年3月22日到24日，我一直在研究PDF文件。原因在于我手下有大量的PDF文件，但是大多数都是扫描版的，它们没有目录，这在阅读的时候很不方便。经过研究后，发现可以使用pdftk+latex来处理。


第一步：使用pdftk导出文件结构,由于标签中含有中文，所以使用dump\_data\_utf8选项，否则使用dump\_data。

\begin{verbatim}
$pdftk your.pdf dump_data_utf8 output your.info
\end{verbatim}

第二步：如果是英文，则直接编辑文件your.info即可。但是目录中含有中文，则研究发现了，在文件your.info中，是通过直接引用字符编码来处理中文的，这给直接编辑导致了麻烦。但是可以用latex编辑目录，生成pdf文件。然后导出latex.info文件，用vim同时编辑两个info文件，your.info和latex.info,取其中的Bookmark部分，然后再校准页码，导入your.pdf就可以了。

\begin{verbatim}
$pdftk your.pdf update_info your.info output out.pdf
\end{verbatim}

这样就可以得到带有outline的文件out.pdf了。

\subsubsection{PDF水印处理}

在使用latex编辑文件时可以通过宏包draftwatermark来加上水印。同时可以使用命令SetWatermarkText来修改水印文字。

\begin{verbatim}
\usepackage{draftwatermark}
\SetWatermarkText{冯老师手稿}
\end{verbatim}

还有一些文件，是通过添加简单的图片水印来实现的。在网络上发现了一个方法来去除水印，但是并不是很普遍。第一步使用pdftk解压缩pdf文件，其中pdf文件结构可以很清楚的识别。但是原来文件中的文字及图片等都是二进制流，所以使用vim打开时，要加上选项-b来告知vim这是二进制文件，不加的话就会出错。如果发现在文件中有某个图片在每一页中都会出现，则删除此项目就可以了。对于某些文字水印也成立。

\begin{verbatim}
$pdftk your.pdf output uncompress.pdf uncompress
$vim -b uncompress.pdf
$pdftk uncompress.pdf output compress.pdf compress
\end{verbatim}

有一种情况比较难处理，比如：朗道十卷.pdf ,在我处理此文件时没有发现有大量相同的项目被引用，所以可以判断这个“万千合集站”的水印是以图片的方式和原扫描图片叠加到一块的。使用以上步骤后，发现它是经过freepic2pdf处理的，这样的话文件所构成的pdf文件就不好识别水印。即便是能够识别，由于水印是混在二进制流中的，所以处理起来也是很麻烦的。事实上，像这种情况，可能也就是photoshop或gimp等软件一页一页的处理，再合成pdf文件才有可能去掉水印，使用vim -b your.pdf的方式将是一种可能但不可行的方法。由于以考研大业为重，此处不再研究，等今后有时间了再去考虑去水印的问题。

\subsection{FTP}
搭建ftp服务器的目的是为了能够与我的ipad顺利传输资料，但是mac系统的封闭性决定了这不适合直接用传输线连接传输资料。所以我只能考虑可行的各种方案，最终决定了使用ftp服务器来共享文件。
\footnote{2019年3月5日晚正式测试成功。}

\begin{enumerate}
   \item 安装
      \begin{verbatim}
      # pacman -S vsftpd
      \end{verbatim}
   \item 配置
      \begin{verbatim}
      # cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
      # vim /etc/vsftpd.conf
      \end{verbatim}

      附件：\textattachfile[color=red]{./attachfiles/vsftpd.conf}{vsftpd.conf}
   \item 新建ftp根目录，并增加权限
      \begin{verbatim}
      # mkdir -m 777 /home/feng/myftp
      \end{verbatim}
   \item 重启，停止，启动服务器
      \begin{verbatim}
      # systemctl restart vsftpd
      # systemctl start vsftpd
      # systemctl stop vsftpd
      \end{verbatim}
   \item 添加用户名和密码
      \begin{verbatim}
      \# useradd -d /home/feng/myftp ipad
      \# passwd ipad
      输入新的UNIX密码：
      重新输入新的UNIX密码:
      passwd:已成功更新密码
      \end{verbatim}
   \item 新建文件vsftpd.user\_list ,其内容就是刚刚添加的用户名
      \begin{verbatim}
      # vim /etc/vsftpd.user_list
      ~ipad
      \end{verbatim}
   \item 新建文件vsftpd.chroot\_list(针对问题500），不需要添加任何用户，如果添加，则这个用户可以访问ftp根文件之外的文件
      \begin{verbatim}
      $ vim /etc/vsftpd.chroot_list
      \end{verbatim}
   \item 针对可能出现的问题（530），修改文件：如果是Debian系统，则不用执行这一步是可以，直接跳到第9步。
      \begin{verbatim}
      # vim /etc/selinux/config
      ~SELINUX=disable
      \end{verbatim}
   \item 针对530问题，删除文件，适合于Ubuntu/Debian系统
      \begin{verbatim}
      # rm /etc/pam.d/vsftpd
      \end{verbatim}
      因为Ubuntu/Debian启用了PAM,所以用到vsftp时需要用到/etc/pam.d/vsftp这个文件（默认源码安装的不会有文件），因此除了匿名用户无法登录。所以解决的办法就是删除这个文件。
   \item 由于我是最小化安装的，所以默认没有安装ftp,则安装ftp客户端，这一步不是必须的，为了在本机测试而设置的。
      \begin{verbatim}
      # pacman -S ftp
      $ ftp 192.168.1.112
      Connected to 192.168.1.112
      220 (vsFTPd 3.0.3)
      Name (192.168.1.112:feng):
      \end{verbatim}
   \item 本机测试
      \begin{verbatim}
      ~$ ftp 10.80.3.192
      Connected to 10.80.3.192.
      220(vsFTPd 3.0.3)
      Name (10.80.3.192:ipad):ipad
      331 Please specify the passwd.
      Password:
      230 Login successful.
      Remote system type is UNIX.
      Using binary mode to transfer files.
      ftp> ls 
      200 PORT command successful.Consider using PASV.
      150 Here commes the directory listing.
      226 Directory send OK.
      ftp> pwd 
      257 ``/home/feng/myftp'' is the current directory
      ftp> bye
      221 Goodbye.
      \end{verbatim}
   \item 附录

      \begin{verbatim}
      FTP 数字代码的意义
      110 重新启动标记应答。
      120 服务在多久时间内ready。
      125 数据链路埠开启，准备传送。
      150 文件状态正常，开启数据连接端口。
      200 命令执行成功。
      202 命令执行失败。
      211 系统状态或是系统求肋响应。
      212 文件的状态。
      214 求肋讯息。
      215 名称系统类型。
      220 新的联机服务ready。
      221 数据连续开启，但无法传输动作。
      226 关闭数据连接端口，请求的文件操作成功。
      227 进入 passive mode。
      230  使用者登入。
      250 请求的文件操作完成。
      257 显示目前的路径名称。
      331 用户名称正确，需要密码。
      332 登入时需要账号信息。
      350 请求的操作需要进一步的人命令。
      421 无法开启数据链路。
      426 关闭联机，终止传输。
      450 请求的操作未执行。
      451 命令终止：有本地的错误。
      452 未执行命令：磁盘空间不足。
      500 格式错误，无法识别命令。
      501 参数语法错误。
      502 命令执行失败。
      503 命令顺序错误。
      504 命令所接的参数不正确。
      530 示登入。
      532 储存文件需要账户登入。
      550 未执行请求的操作。
      551 请求的命令终止，类型未知。
      552 请求的文件终止，储存位水溢出。
      553 未执行请求的命令，名称不正确。
      \end{verbatim}
\end{enumerate}

\subsubsection{问题解决}

2021年 03月 07日 星期日 在使用 vsftpd 向ipad 传输数据时，发现不能正常开启vsftpd ,经百度发现原因。解决方案为：在 /etc/vsftpd.conf 中添加

\begin{verbatim}
seccomp_sandbox=NO
\end{verbatim}

\subsubsection{什么是xinetd模式和initd模式}
像其它守护程序一样，vsftpd提供了standalone和inetd（inetd或xinetd）两种运行模式。简单解释一下， standalone一次性启动，运行期间一直驻留在内存中，优点是对接入信号反应快，缺点是损耗了一定的系统资源，因此经常应用于对实时反应要求较高的专业FTP服务器。inetd恰恰相反，由于只在外部连接发送请求时才调用FTP进程，因此不适合应用在同时连接数量较多的系统。此外，inetd模式不占用系统资源。除了反应速度和占用资源两方面的影响外，vsftpd还提供了一些额外的高级功能，如inetd模式支持$per_IP$(单一IP)限制，而 standalone模式则更有利于PAM验证功能的应用。

\subsubsection{xinetd运行模式}
大多数较新的系统采用的是xinetd超级服务守护进程。使用“vi /etc/xinetd.d/vsftpd” 看一下它的内容，如下：

\begin{verbatim}
disable = no 
socket_type = stream
wait = no
\end{verbatim}
这表示设备是激活的，它正在使用标准的TCP Sockets。
如果“/etc/vsftpd.conf”中的有选项为“listen=YES”,注销它
最后，重启xinetd，命令如下： 
\begin{verbatim}
$ /etc/rc.d/init.d/xinetd restart
\end{verbatim}

需要注意的是，“/etc/xinetd.d”目录中仅能开启一个FTP服务。

\subsubsection{standalone模式}

standalone模式便于实现PAM验证功能。进入这种模式首先要关闭xinetd下的vsftpd，设置 “disable = yes”，或者注销掉“/etc/inetd.conf”中相应的行。然后修改“/etc/vsftpd.conf”中的选项为“listen=YES”如果是standlone模式，那么它是作为单独的一个服务启动的，不需要系统协作，不作为系统服务，如果要是成为xinetd模式，那么它的服务就要受系统服务的限制，比如创建一个新的服务进程，但是也有缺点，如果xinetd服务本身出了问题，那么相关的服务也是会受到影响的。

\subsubsection{xinetd模式和standalone模式的区别}

以xinetd模式运行的服务表示该服务进程并不以守护进程执行,以FTPD进程为例吧,以xinetd模式运行这个服务,情况是这样的,本身FTP服务是会监听21号端口的,但是以这种模式运行这个服务的话,21号端口则由xinetd进程来监听（此时FTPD服务并没有运行）,如果你的网卡接收到有21号端口请求,则有xinetd进程会去调用FTPD程序,将在21号端口接收到的请求数据移交给FTPD进程去处理，处理完后FTPD进程退出，而xinetd进程继续监听21号端口,这有点类似windows的svhost进程;而以 standalone模式运行的服务则是服务进程,如ftpd以守护进程在内存中运行,接收到21号端口的请求后由FTPD进程fork出一个子进程进行处理，而原进程继续监听21号端口。

\subsection{搭建个人博客}
\begin{enumerate}
   \item 需要软件共有三个  node ,npm ,hexo
\end{enumerate}<++>

\section{Shell命令}


\subsection{批量创建文件}

以下命令可以创建9个文件，分别为：file1 , file2 ,$\ldots$,file9 。其中对\{1..9\} 的解释为：其中的两个点号表示循环，所以可以建立，删除对应的多个有规律的文件。

\begin{verbatim}
$ touch file{1..9}
\end{verbatim}

以下命令可以分别创建文件： file1,file3,file5,file7


\begin{verbatim}
$ touch file{1,3,5,7}
\end{verbatim}

以下命令可以创建9个文件夹，分别为：dir1,dir2,$\cdots$ ,dir9 。

\begin{verbatim}
$ mkdir dir{1..9}
\end{verbatim}

以下命令可以分别创建文件夹: dir1,dir3,dir5,dir7


\begin{verbatim}
$ mkdir dir{1,3,5,7}
\end{verbatim}

\subsection{批量重命名}

\subsubsection{rename 重命名文档}

以下命令可以将当前文件夹下所有的文件名中的{\bf file}替换为 {\bf 文档} ，同时文件名中的其它部分不变。使用rename.ul 只能统一命名文件名中的一部分为另一相同的名称。按网上的说法rename 有两个版本，一个C语言版，另一个为perl 版本，其中perl版本支持正则表达式，不巧的是我的Debian10  中的好象是C语言版本，所以它的能力是有限的。

\begin{verbatim}
$ rename.ul file 文档 ./* 
\end{verbatim}

\subsubsection{借助for循环，利用mv重命名}

以下命令为输出预览，由于执行的是大批量的命名工作，谨慎一点还是很有必要的。

\begin{verbatim}
$ for name in ` ls ` ; do echo $name ${name%.txt}.tex ; done
\end{verbatim}

如果检查无误，则将 {\bf echo} 换为 {\bf mv} 即可 

\begin{verbatim}
$ for name in ` ls ` ; do mv $name ${name%.txt}.tex ; done
\end{verbatim}

在此命名方式中可以去掉名称中的一些附加字符，重点在花括号中的取代部分。

\subsubsection{linux获取文件名的原理}

\begin{enumerate}
   \item linux获取文件名，截取字符串的方法为：\$\{\}
   \item \$\{var\#\#*/\} 该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容，返回从左边算起的最后一个'/'（不含该字符）的右边的内容。
   \item \$\{var\#*\} 该命令的作用是去掉变量var从左边算起的第一个'/'字符及其左边的内容，返回从左边算起第一个'/'（不含该字符）的右边部分的内容。
   \item \$\{var\%/*\} 该命令的使用是去掉变量var从右边算起的第一个'/'字符及其右边的内容，返回从右边算起的第一个'/'（不含该字符）的左边的内容。
   \item \$\{var\%\%/*\} 该命令的使用是去掉变量var从右边算起的最后一个'/'字符及其右边的内容，返回从右边算起的最后一个'/'（不含该字符）
\end{enumerate}

\subsection{linux shell循环：for、while、until用法详解}

循环语句常见分类有三个：1.for语句 ; 2.while语句; 3.until 语句 。循环体包括两部分：1.循环体进入条件 ；2.循环体退出条件 。循环次数：1.事先已知for语句; 2.事先未知while、until语句。

\subsection{循环中的步进}

\subsubsection{显示1---10}

\begin{verbatim}
$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
$ echo $(seq 1 10)
1 2 3 4 5 6 7 8 9 10
\end{verbatim}

\subsubsection{1---10递加}

\begin{verbatim}
$echo {1..10..2}
1 3 5 7 9
$echo $(seq 1 2 10)
1 3 5 7 9
\end{verbatim}

\subsubsection{1---10递减}

\begin{verbatim}
$echo {10..1..2}
10 8 6 4 2
$echo $(seq 10 -2 1)
10 8 6 4 2
\end{verbatim}

\subsubsection{随机生成16位包含数字、大小写字母、符号的密码}

\begin{verbatim}
$cat /dev/urandom |tr -dc ^\circ-9a-zA-Z!@_#?.,` |head -c 16
\end{verbatim}

\subsubsection{tr -d和tr -dc的用法}

\begin{verbatim}
$echo 12324345 |tr -d 2 %不要数字2
$echo 12324345 |tr -dc 2 %支取数字2
\end{verbatim}



\subsection{for循环常见语法格式}

\subsubsection{for循环的一般用法}

\begin{verbatim}
for 变量名 in 列表; do 循环体 ; done
\end{verbatim}

循环执行机制：依次将列表中的元素赋值给变量名，每次赋值后执行一次循环体，直到列表中的元素耗尽循环结束。列表生成方式有:

\begin{enumerate}
   \item 直接给出列表
   \item 整数列表
      \begin{enumerate}
	 \item \{start..end\} 如：\{1..10\}
	 \item \$(seq[start[step]] end) 如： ` seq 1 2 100` 表示1-100 之间的所有奇数 
      \end{enumerate}
   \item 返回列表的命令 \$(COMMAND) 如：` ls /etc`
   \item 使用glob,如： *.sh
   \item 变量引用： \$@,\$*
\end{enumerate}

\subsubsection{for循环的特殊用法}

双小括号法，即(($\ldots$))格式，也可以用于算术运算。双小括号方法也可心使用bash shell实现C语言风格的变量操作

\begin{verbatim}
#i=10
#((i++))
\end{verbatim}

用法格式

\begin{verbatim}
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式));do 循环体 ; done
\end{verbatim}

\subsection{while循环}

while循环格式为

\begin{verbatim}
while CONDITION ; do 循环体 ; done
\end{verbatim}

CONDITION:循环条件;进入循环之前，先做一次判断;每一次循环之后会再次做判断;条件为``true'',则执行一次循环;增至条件测试状态为``false''终止循环。因此：CONDITION 一般
应该有循环控制变量;而此变量的值会在循环体中不断地被修正。进入条件：CONDITION 为 true ;退出条件： CONDITION 为false

``:''和 true 的返回值都为真

\begin{verbatim}
$true
$echo $?
0
$:
$echo $?
0
$false
$echo $?
1
\end{verbatim}

\subsubsection{while循环的特殊用法}

\begin{verbatim}
while read line;do 循环体; done < /PATH/FROM/SOMEFILE
\end{verbatim}

依次读取 /PATH/FROM/SOMEFILE 文件中的每一行，且将行赋值给变量line


\subsection{until循环}

until循环格式为

\begin{verbatim}
until CONDITION ; do 循环体 ; done
\end{verbatim}

进入条件：CONDITION 为false ;退出条件：CONDITION 为true 。

\subsection{循环控制语句continue}

continue用于循环体中。

continue[N]:提前结束第N层的本轮循环而直接进入下一轮判断;最内层为第1层，格式为

\begin{verbatim}
while CONDITION1 ; do 
     CMD1
     ...
     if CONDITION2;then
     continue
     fi
     CMDn
\end{verbatim}

\subsection{循环控制语句break}
用于循环体中

break[N]:提前结束第N层循环，最内层为第1层

\begin{verbatim}
while CONDITION1 ; do 
     CMD1
     ...
     if CONDITION2;then
       break
     fi
     CMDn
     ...
\end{verbatim}

\subsection{循环控制语句shift}

shift[n]用于将参量列表list左移指定次数，缺省为左移一次。参量列表list一旦被移动，最左端的那个参量就从列表中删除。while循环遍历位置参量列表，常用到shift

\begin{verbatim}
./doit.sh a b c d e f g h
./shift.sh a b c d e f g h
\end{verbatim}

\subsection{select循环}

select 循环主要用于创建菜单，按数字顺序排列的菜单项将显示在标准的位置上，并显示PS3提示符，等待用户输入。用户输入菜单列表中的某个数字，执行相当的命令，用户输入被保存在内置变量REPLY中。select 是个无限循环，因此要记得用break命令退出，或用exit命令终止脚本。也可以按ctrl+c退出循环。select经常和case联合使用，与for循环类似，可以省略in list ，此时使用位置参量。

\subsection{信号捕捉trap}

\begin{enumerate}
   \item trap `触发指令`信号：自定义进程收到系统发出的指定信号后，将执行触发指令，而不会执行原操作
   \item trap ``信号：忽略信号的操作
   \item trap '-'信号：恢复信号的操作
   \item trap -p ：列出自定义信号操作
\end{enumerate}

\section{可选软件}

这部分记录一些可选择的软件，比如说thinkfan可以自主控制风扇的运行，但是这个手动控制我觉得不如自动控制来的好，同时Manjaro对于T490的支持相当好，所以最终我实现了编译源码安装成功了thinkfan，但是还是选择放弃它，而使用Manjaro自动设置。此处仅记录这几天的辛苦学习的结果，以方便日后的使用。而office2007使用playonlinux运行，这个playonlinux 下载一些组件时非常慢，同时我自己的E47A 已经安装了windows10 可以处理这些msoffice 文档，故此也把它列为了可选择安装的软件。

\subsection{安装thinkfan}

\subsubsection{thinkfan 源码编译}
\begin{enumerate}
   \item  下载
      \url{https://github.com/vmatare/thinkfan}

      \begin{figure}[H]
	 \centering
	 \includegraphics[scale=0.4]{./thinkfan-download.png}
	 \caption{下载thinkfan源码}
	 \label{fig:thinkfan}
      \end{figure}

   \item 附件：\textattachfile[color=red]{./attachfiles/thinkfan-1.2.1.tar.gz}{thinkfan-1.2.1.tar.gz}

   \item 安装编译工具
      \begin{verbatim}
      # pacman -S gcc manke pkgconf cmake libyaml-cpp
      \end{verbatim}
   \item 源码编译
      \begin{enumerate}
	 \item In the thinkfan main directory ,do 
	    \begin{verbatim}
	    $ mkdir build & cd build
	    \end{verbatim}
	 \item Set your build options from the comman line. E.g. to configure a build with debugging support:
	    \begin{verbatim}
	    $ cmake -D CMAKE_BUILD_TYUPE:STRING=Debug ..
	    \end{verbatim}
      \end{enumerate}
   \item To compile simply run:
      \begin{verbatim}
      $ make
      \end{verbatim}
   \item If you did not change CMAKE\_INSTALL\_PREFIX ,thinkfan will be installed under {\bf /usr/local} by dong:
      \begin{verbatim}
      # make install
      \end{verbatim}
\end{enumerate}

按上述步骤可以编译完成 thinkfan ,还有一些细节没有完全记录，请参考源码包内文件{\bf README.md}。在编译过程中使用到了 {\bf cmake} 工具，这个可能参考其官方网址\url{https:cmake.org} 或百度百科 \url{https://baike.baidu.com/item/cmake/7138032?fr=aladdin}。 同时thinkfan 的配置中用到了 {\bf yaml} 语言，这可以参考其官方网址 \url{https://yaml.org} 或者百度百科 \url{https:baike.baidu.com/item/YAML/1067697?fr=aladdin}。

\subsubsection{thinkfan 配置}

此thinkfan是我在debian10 下安装使用的，由于ThinkPadT490 硬件过新，debian10不能很好的支持它，尤其是显卡问题。这部分是经过多方折腾后的结果，可以使用但不是最佳，这样使用了半年多。然尔在我试用manjaro后，发现这个archlinux 系的系统居然各项驱动都完美安装，且电脑直接能完美运行。但是也有尚未解决的问题，其一为thinkfan 不能实现方便的一键安装，其二为指纹识别仍然无法识别出来。鉴于这二者影响都不大，同时manjaro 也是目前我的ThinkPadT490 工作状态最好的系统，所以决定暂时放弃这二个软件的安装。盼望以后能够实现一键安装吧。

ThinkPad的风扇是可以设置人工控制的，这需要借助 thinkfan ,所以先安装软件
\begin{verbatim}
# pacman -S thinkfan lm-sensors
\end{verbatim}

配置内核模块：在/usr/lib/modprobe.d/thinkpad\_acpi.conf 中加入

\begin{verbatim}
echo ''options thinkpad_acpi fan_control=1'' >
/etc/lib/modprobe.d/thinkpad_acpi.conf
\end{verbatim}

这样风扇控制就设置成自动启动了。现在加载内核模块

\begin{verbatim}
modprobe thinkpad_acpi
\end{verbatim}

接下来检查传感器

\begin{verbatim}
# sensors-detect
\end{verbatim}

之后的选项都按 y 。执行完毕，再执行

\begin{verbatim}
find /sys/devices -type f -name ''temp*_input''
\end{verbatim}

这样会得到一系列温度传感器的结果，按网上的教程都比较老旧了，这里我自己研究了thinkfan 的配置文件 ，其目前使用yaml 语言写成。由于不同的传感器开机加载的顺序不同，所以按照传统的方法来设置是不同的。研究后发现，使用相对路径的写法不仅可以获得全部温度传感器的结果，还能根据自己的需要关闭一些温度传感器的监控。这个配置文件不是一种写法，此处参考文件/thinkfan-1.2.1/examples/thinkfan.yaml附件为：

附件：\textattachfile[color=red]{./attachfiles/example.yaml}{example.yaml}

此处我的电脑ThinkPadT490的具体设置如下（温度区间不一定合理，请君自己修改为认可的值)

附件：\textattachfile[color=red]{./attachfiles/thinkfan.yaml}{thinkfan.yaml}

在thinkfan.yaml 文件中，最下方的小括号中的设置是风扇的等级设置。第一列是风扇等级，第二列是风扇工作于此等级的最低温度，第三列是最高温度。启用服务以便在每次启动和删除特权时自动启动该服务。设置完毕，检测是否thinkfan 正确运行，在终端下执行

\begin{verbatim}
thinkfan -n
\end{verbatim}

这时如果正确运行，则会输出一系统温度值及thinkfan所处于的风扇等级。

下面设置系统自动加载thinkfan:执行第一条命令，启用服务以便在每次启动和删除特权时自动启动服务，重新启动电脑，执行第二条命令，检查服务
\begin{verbatim}
# systemctl enable thinkfan
# systemctl status thinkfan.service
\end{verbatim}

{\small
   \begin{verbatim}
   ● thinkfan.service - simple and lightweight fan control program
   Loaded: loaded (/lib/systemd/system/thinkfan.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-02-27 16:03:45 CST; 1h 28min ago
   Process: 622 ExecStart=/usr/sbin/thinkfan $DAEMON_ARGS (code=exited, status=0/SUCCESS)
   Main PID: 724 (thinkfan)
   Tasks: 1 (limit: 4915)
   Memory: 876.0K
   CGroup: /system.slice/thinkfan.service
   └─724 /usr/sbin/thinkfan -q -b 1 -s 15
   \end{verbatim}
}

上述结果表明thinkfan正常工作了。

\subsection{安装office2007}


2021年12月7日测试完wps-office 11.1.0.10702 发现其完全可以应对日常工作了，对于简单的打开编辑工作完全可胜任。但是如果在linux下使用vba功能，则wps-office不能胜任，则此时才建议安装office2007。 

安装playonlinux , 由于它是 wine 的前端，所以系统会自动安装 wine 软件，同时由于 此软件需要32位支持，所以在 linux 上相应的安装上32位支持。

\begin{verbatim}
# pacman -S playonlinux wine32 
# pacman -S samba
\end{verbatim}

上述第二行的命令是在安装完成playonlinux 之后，运行安装office程序后wine崩溃，这个原因在我使用终端运动wine时找到了答案，就是第二行命令。由于在 \system{} 下找不到winbind ，所以百度之后发现 winbind 是samba 的一个组件，于是安装samba 后问题解决。同时也可以在安装playonlinux之前最好还是安装好wine,这样可以确保安装完成playonlinux后可以直接使用。

如果没有安装上述 winbind 的话，office 有可能不能正常工作，但是我实际上没有安装这个软件，系统也正常工作了。由于害怕以后有不可知的问题发生，所以后来又装上了这个软件。下载 office2007.iso 然后挂载镜像再使用 playonlinux 安装即可。在安装时由于 office 自带了一个微软输入法，所以在装 office 时进行自定义安装，在office 共享功能里，把输入法去掉即可。我在安装时没有去掉，所以在使用 office2007 word 时，发现切换输入法出现问题，百度之后发现可以打开文件--> 选项 --> 高级 --> 输入法控制状态 ，去掉那个勾就能够正常切换输入法了。


在安装完成office2007后发现，即使在我的新电脑下它启动的也不是很快。于是百度了这个问题，得到的答案是wine 在启动时会请求gbk-0字体。一种有效的解决方法是修改 

\begin{verbatim}
/user/share/X11/local/zh_CN.UTF8/XLC_LOCAL 
\end{verbatim}

文件，将所有的 GBK字体都注释掉，同时将GB13000和GB2312也注释掉就可以了。但是我将此文件改名之后发现也没有影响，所以写下此段文字记录一下。

在这一部分记录字体设置问题，安装成功office2007后，总感觉字体界面和windows下差距太大，所以此处经百度又增加一个设置字体的部分。第一步是将windows字体simsun.ttc simfang.ttc 复制到 
\begin{verbatim}
~/PlayOnLinux's virtual drives/Office2007/drive_c/windows/Fonts
\end{verbatim}
第二步，修改
\begin{verbatim}
~/PlayOnLinux's virtual drives/Office2007/system.reg
\end{verbatim}
搜索：LogPixels 找到的行应当是
\begin{verbatim}
[System\CurrentControlSet\HardwareProfiles\Current\Software\Fonts]
\end{verbatim}
将其中的
\begin{verbatim}
''LogPixels''=dword:00000060
\end{verbatim}
改为：
\begin{verbatim}
 ''LogPixels''=dword:00000070
\end{verbatim}
搜索：FontSubstitutes 找到的行应为
\begin{verbatim}
[Software\Microsoft\WindowsNT\CurrentVersion\FontSubstitutes]
\end{verbatim}
将这一部分的等号右侧的值统一改为simsun,之后保存。
最后，修改
\begin{verbatim}
~/PlayOnLinux's virtual drives/Office2007/drive_c/windows/win.ini
\end{verbatim}
在文件末尾加入：
\begin{verbatim}
[Desktop]
menufontsize=13
messagefontsize=13
statusfontsize=13
IconTitleSize=13
\end{verbatim}


\subsection{安装wps 11.1.0.10702}

\subsubsection{安装yay和debtap}
\begin{verbatim}
# pacman -S yay 
$ yay -S debtap
\end{verbatim}

在使用\system{} 时，有时候找不到对应的软件包，所以这时候可以借助 yay 转换debian 的软件包来实现软件安装。

\subsubsection{debtap升级}

\begin{enumerate}
   \item 替换debtap同步仓库为国内的源
      \begin{verbatim}
      # vim /usr/bin/debtap
      \end{verbatim}
      替换 http://ftp.debian.org/debian/dists 为 https://mirrors.ustc.edu.cn/debian/dists

      替换 http:archive.ubuntu.com/ubuntu/dists 为 https://mirrors.ustc.edu.cn/ubuntu/dists/
   \item 执行升级 
      \begin{verbatim}
      # debtap -u
      \end{verbatim}
   \item 使用方法
      \begin{verbatim}
      # debtap foobar.deb
      \end{verbatim}
      注意：安装时会提示输入包名，以及license。 包名随意，license 就填GPL吧，上述操作完成后会在deb包同级目录生成foobar.tar.xz文件。
   \item 静默模式 
      \begin{verbatim}
      # debtap -q foobar.deb
      \end{verbatim}
    选项 -q 略过了编辑元数据之外的所有问题。
 \item 略过所有的问题（不推荐）
    \begin{verbatim}
    # debtap -Q foobar.deb
    \end{verbatim}
 \item 安装转换好的软件包
    \begin{verbatim}
    # pacman -U foobar.tar.xz
    \end{verbatim}
\end{enumerate}

\subsubsection{安装wps-office}
在实际操作中使用上述方法转换wps-office 并没有成功。可以按下述方法安装wps-office 国际版。原因在于国际版没有必须登录的要求，同时比较精简，但是其下载速度远不如国内版，于是借用下载工具提前下载好deb软件包后。执行

\begin{verbatim}
$ yay -S wps-office
\end{verbatim}

此时会弹出二个选项，1为wps-office 是国际版，2为 wps-office-cn 是国内版，要据自己喜好选择就好。对于wps-office 当进入下载过程时，按Ctrl+C 终止程序，然后将提前下好的deb包 复制到位置

\begin{verbatim}
~/.cache/yay/wps-office/
\end{verbatim}

再执行

\begin{verbatim}
$ yay -S wps-office
$ yay -S wps-office-mui-zh-cn
\end{verbatim}

此时系统就可以正常根据deb包转换成manjaro 包，转换完毕申请root权限，完成安装。但是在linux 下 wpspdf  组件是多余的，因为我们有更好的evince 。此处我写了一个脚本用以删除wpspdf组件，以root权限执行脚本就完成了wpspdf组件的去除工作，现在可以开心的使用wps办公了。

附件：\textattachfile[color=red]{./attachfiles/RMwpspdf.sh}{RMwpspdf.sh}

中文版和国际版是主程序应该是不同的，因为在英文版中是没有一点联网功能的，包括”团队“ ,”会议“ 等侧边栏内容，但是一旦安装中文语言包后就会出现这两项。仔细分析后得出结论：主程序会检测语言设置，中英文分别有不同的设置。通过分析配置文件，成功去除了中文语言包后出现的这两个联网项。在最新版wps-office 11.0.1.10702 中，出现了"账号登录、未保存、协作” ,于是升级了优化脚本，适配此版去除了这些联网项。安装成功后如图

\begin{figure}[H]
   \centering
   \includegraphics[scale=0.12]{./wps0.png}
   \includegraphics[scale=0.15]{./wps1.png}
   \caption{去除PDF组件和多余联网组件后的样子}
\end{figure}

\end{document}
